package vetxsoft.bean;

import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import vetxsoft.entity.TipoProducto;
import vetxsoft.system.IVetexsoftSystem;

/**
 *
 * @author user
 */
@ManagedBean
@SessionScoped
public class TipoProductoBean implements Serializable {

    @EJB
    private IVetexsoftSystem vetexsoftSystem;
    private TipoProducto tipoProducto = new TipoProducto();
    private boolean stored = false;

    public TipoProductoBean() {
    }

    public IVetexsoftSystem getVetexsoftSystem() {
        return vetexsoftSystem;
    }

    public boolean isStored() {
        return stored;
    }

    public void setStored(boolean stored) {
        this.stored = stored;
    }

    public TipoProducto getTipoProducto() {
        return tipoProducto;
    }

    public void setTipoProducto(TipoProducto tipoProducto) {
        this.tipoProducto = tipoProducto;
    }

    public void cancelarTipoProductoAccion() {

        this.tipoProducto = new TipoProducto();
        this.stored = false;
    }

    public List<TipoProducto> obtenerTipoProductos() {

        try {

            return this.vetexsoftSystem.obtenerTipoProductos();

        } catch (Exception exc) {
            return null;
        }
    }

    public List<TipoProducto> obtenerTipoProductoActivos() {

        try {

            return this.vetexsoftSystem.obtenerTipoProductosActivos();

        } catch (Exception exc) {

            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha ningun tipo de insumo registrado.", exc.getClass().getName()));
            return null;
        }
    }

    public void guardarTipoProductoAccion() {

        try {

            this.tipoProducto.setStored(this.stored);

            if (this.tipoProducto.getEstado() == null) {
                this.tipoProducto.setEstado("Activo");
            } else if (!this.tipoProducto.getEstado().trim().equalsIgnoreCase("Inactivo")) {
                this.tipoProducto.setEstado("Activo");
            }

            this.vetexsoftSystem.saveTipoProducto(this.tipoProducto);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "El tipo de insumo fue guardado éxitosamente.", ""));
            this.tipoProducto = new TipoProducto();
            this.stored = true;

        } catch (Exception exc) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido registrar el tipo de insumo. Por favor, intentelo de nuevo.", exc.getClass().getName()));
        }
    }

    private void eliminarTipoProducto() {

        try {

            this.vetexsoftSystem.removeTipoProducto(this.tipoProducto);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "El tipo de insumo fue eliminado éxitosamente.", ""));
            this.tipoProducto = new TipoProducto();

        } catch (Exception exc) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar el tipo de insumo. Por favor, intentelo de nuevo.", exc.getClass().getName()));
        }
    }

    public void activar(TipoProducto tipo) {
        try {

            this.tipoProducto = this.vetexsoftSystem.buscarTipoProducto("" + tipo.getCodigo());
            this.tipoProducto.setEstado("Activo");
//            this.tipoProducto.setStored(true);
            this.vetexsoftSystem.saveTipoProducto(this.tipoProducto);
            this.tipoProducto = new TipoProducto();

        } catch (Exception ex) {
        }
    }

    public void inactivar(TipoProducto tipo) {
        try {

            this.tipoProducto = this.vetexsoftSystem.buscarTipoProducto("" + tipo.getCodigo());
            this.tipoProducto.setEstado("Inactivo");
//            this.tipoProducto.setStored(true);
            this.vetexsoftSystem.saveTipoProducto(this.tipoProducto);
            this.tipoProducto = new TipoProducto();

        } catch (Exception ex) {
        }
    }
}
